package com.sheng.leetcode.year2023.month03.day01;

import org.junit.Test;

import java.util.Arrays;

/**
 * @author liusheng
 * @date 2023/03/01
 * <p>
 * 2373. 矩阵中的局部最大值<p>
 * <p>
 * 给你一个大小为 n x n 的整数矩阵 grid 。<p>
 * 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵  maxLocal ，并满足：<p>
 * maxLocal[i][j] 等于 grid 中以 i + 1 行和 j + 1 列为中心的 3 x 3 矩阵中的 最大值 。<p>
 * 换句话说，我们希望找出 grid 中每个 3 x 3 矩阵中的最大值。<p>
 * 返回生成的矩阵。<p>
 * <p>
 * 示例 1：<p>
 * 输入：grid = [[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]]<p>
 * 输出：[[9,9],[8,6]]<p>
 * 解释：原矩阵和生成的矩阵如上图所示。<p>
 * 注意，生成的矩阵中，每个值都对应 grid 中一个相接的 3 x 3 矩阵的最大值。<p>
 * <p>
 * 示例 2：<p>
 * 输入：grid = [[1,1,1,1,1],[1,1,1,1,1],[1,1,2,1,1],[1,1,1,1,1],[1,1,1,1,1]]<p>
 * 输出：[[2,2,2],[2,2,2],[2,2,2]]<p>
 * 解释：注意，2 包含在 grid 中每个 3 x 3 的矩阵中。<p>
 * <p>
 * 提示：<p>
 * n == grid.length == grid[i].length<p>
 * 3 <= n <= 100<p>
 * 1 <= grid[i][j] <= 100<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/largest-local-values-in-a-matrix">2373. 矩阵中的局部最大值</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2373 {

    @Test
    public void test01() {
//        int[][] grid = {{9, 9, 8, 1}, {5, 6, 2, 6}, {8, 2, 6, 4}, {6, 2, 2, 2}};
        int[][] grid = {{1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 2, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}};
        System.out.println(Arrays.deepToString(new Solution().largestLocal(grid)));
    }
}

class Solution {
    public int[][] largestLocal(int[][] grid) {
        int n = grid.length;
        int[][] maxLocal = new int[n - 2][n - 2];
        for (int i = 0; i < n - 2; i++) {
            for (int j = 0; j < n - 2; j++) {
                // maxLocal 数组中的 i，j 元素
                for (int k = i; k <= i + 2; k++) {
                    for (int l = j; l <= j + 2; l++) {
                        maxLocal[i][j] = Math.max(maxLocal[i][j], grid[k][l]);
                    }
                }
            }
        }
        return maxLocal;
    }
}
